package eva.savant.business.ventas.view

import eva.savant.business.ventas.service.TSPedido
import eva.savant.businessobject.gl.Persona
import eva.savant.businessobject.mt.Material
import eva.savant.businessobject.vt.Cliente
import eva.savant.businessobject.vt.Pedido
import eva.savant.businessobject.vt.PedidoDetalle
import eva.savant.businessobject.vt.Prevendedor
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.primefaces.event.FileUploadEvent

import javax.faces.bean.ManagedBean
import javax.faces.bean.SessionScoped
import javax.annotation.PostConstruct

@SessionScoped
@ManagedBean(name = 'ITPedidoImport')
public class ITPedidoImport extends Bean {

  TSPedido tsPedido

  @PostConstruct
  public void cleanEntity() {

    lsEntity= new ArrayList<Pedido>()

    tsPedido= (TSPedido) getSpringBean('tsPedido')
  }

  public void save() {

    def p= get(Prevendedor.class,'persona.id=?',usuario.persona.id)

    lsEntity.each { x -> def c= get(Cliente,'codigo=?',x.cliente.codigo); x.prevendedor= p; x.cliente= c; tsPedido.save(x) }

    addInfoMessage 'Se guardaron PEDIDOS = ' + lsEntity.size()
  }

  public void updateMaster(FileUploadEvent event) {

    def workbook= new HSSFWorkbook(event.file.inputstream)

    if(workbook.numberOfSheets == 0) throw new Exception('El archivo no tiene contenido')

    def ls= new LinkedHashMap<String,Pedido>()


    def sheet = workbook.getSheetAt(0)

    for(int i=1; i<sheet.physicalNumberOfRows; i++) {

    def row= sheet.getRow(i)

    def fecha   = stringCell( row,0)

    def cliCod  = integerCell(row,1)

    def cliNom  = stringCell( row,2)

    def matCod  = stringCell( row,3)

    def matNom  = stringCell( row,4)

    def cantidad= integerCell(row,5)

    def id= fecha + cliCod


    def x= ls[id]


    if(x == null) {

    x= new Pedido()

    x.fecha= toDate(fecha,'dd-MM-yyyy')

    x.cliente= new Cliente(codigo: cliCod)

    x.cliente.persona= new Persona(nombre: cliNom)

    x.lsPedidoDetalle= new ArrayList<PedidoDetalle>(); alta(x); ls[id]= x }


    def d= new PedidoDetalle()

    d.material= new Material(id: sociedad.id + matCod)

    d.material.codigo= matCod

    d.material.nombre= matNom

    d.cantidad= cantidad

    alta(d)


    x.lsPedidoDetalle.add(d) }


    lsEntity= new ArrayList<Pedido>()

    ls.each { x -> lsEntity.add x.value }
  }

}